#define _CRT_SECURE_NO_WARNINGS 1
#pragma once

#if 0
#include<iostream>
using namespace std;
#pragma pack(4)
struct S1
{
	int i : 8; 
	char j : 4;
	int a : 4;
	double b;
};
struct S2
{ 
	int i : 8;
	char j : 4; 
	double b;
	int a : 4;
};
struct S3
{
	int i;
	char j;
	double b;
	int a;
};
#pragma pack()
int main()
{
	cout << sizeof(S1) << endl;
	cout << sizeof(S2) << endl;
	cout << sizeof(S3) << endl;
	return 0;
}

#endif


#include <iostream>
#include <vector>
using namespace std;

int main() 
{
    vector<int> v;
    v.resize(1000, 0);  // 防止扩容，提前开辟好空间
    for (int i = 0; i < 1000; i++) v[i] = i;

    // 每隔两个数删除一个数
    auto it = v.begin();
    int count = 0;  // 初始化count为0

    while (v.size() > 1) {
        
        if (count % 3 == 2)  // 改为count % 3 == 2以正确每隔两个数删除一个数
        {
            count = 0;
            cout << "当前要删除的元素为：" << *it << endl;
            auto copyIt = v.erase(it);  // 删除当前元素，并返回下一个元素的迭代器
            if (copyIt == v.end())
                it = v.begin();
            else
                it = copyIt;
        }
        else {
            count++;
            auto copyIt = it;
            if (++copyIt == v.end())
                it = v.begin();
            else
                it++;
        }
    }

    // 最后it指向的元素，就是最后一个被删除元素
    cout << "最后一个被删除的元素的下标位置为：" << *it << endl;

    return 0;
}
